// 环境配置文件 - 整合版
// 环境配置模块 - 提供统一的环境检测和配置访问接口

// 导入主配置文件
// 使用try-catch避免在ES模块环境中出错
let mainConfig, allConfigs, NODE_ENV, APP_VERSION;
try {
  const config = require('./config.js');
  mainConfig = config.config;
  allConfigs = config.allConfigs;
  NODE_ENV = config.env;
  APP_VERSION = config.version;
} catch (e) {
  // 提供默认值作为后备
  console.warn('Failed to load config.js, using default values:', e);
  mainConfig = {};
  allConfigs = {};
  NODE_ENV = process.env.NODE_ENV || 'development';
  APP_VERSION = 'v2.2';
}

/**
 * 判断是否为开发环境的增强方法
 * 不仅依赖NODE_ENV，还结合URL检查确保在开发服务器上正确识别
 */
function isDevelopmentEnvironment() {
  // 基础判断 - 基于环境变量
  if (NODE_ENV !== 'production') {
    return true;
  }
  
  // 高级判断 - 基于运行环境的URL特征
  try {
    // 检查是否在浏览器环境中运行
    if (typeof window !== 'undefined' && window.location) {
      const hostname = window.location.hostname;
      const port = window.location.port;
      
      // 本地开发常见主机名和端口
      return hostname === 'localhost' || 
             hostname === '127.0.0.1' || 
             /\bdev\b|\btest\b|\bstaging\b/i.test(hostname) || 
             ['3000', '8080', '8000', '4200', '8888'].includes(port);
    }
  } catch (e) {
    // 非浏览器环境下忽略
  }
  
  return false;
}

/**
 * 环境配置对象
 * 提供清晰的访问接口和增强的环境检测功能
 */
const envConfig = {
  // 基础环境信息
  isProduction: NODE_ENV === 'production',
  isDevelopment: isDevelopmentEnvironment(),
  version: APP_VERSION,
  nodeEnv: NODE_ENV,
  
  // API配置快捷访问
  get apiUrl() {
    return mainConfig.api.baseUrl;
  },
  
  // 缓存配置快捷访问
  get cacheEnabled() {
    return mainConfig.cache.enabled;
  },
  
  // Service Worker配置快捷访问
  get serviceWorkerEnabled() {
    // 确保在开发环境下不会强制启用Service Worker
    return mainConfig.sw.enabled && !this.isDevelopment;
  },
  
  // 获取完整配置
  get config() {
    return mainConfig;
  },
  
  get allConfigs() {
    return allConfigs;
  },
  
  // 工具方法：根据环境获取配置值
  getValue(key, defaultValue = null) {
    // 支持路径式访问，如 'api.timeout'
    if (typeof key === 'string' && key.includes('.')) {
      const path = key.split('.');
      let value = mainConfig;
      
      for (const segment of path) {
        if (value === undefined || value === null) break;
        value = value[segment];
      }
      
      return value !== undefined && value !== null ? value : defaultValue;
    }
    
    return mainConfig[key] !== undefined ? mainConfig[key] : defaultValue;
  }
};

// 导出配置 - 只使用CommonJS语法
module.exports = envConfig;

// 为了保持向后兼容性，同时导出常用的属性
exports.version = APP_VERSION;
exports.apiUrl = mainConfig.api?.baseUrl || '/';
exports.isProduction = NODE_ENV === 'production';
exports.isDevelopmentEnvironment = isDevelopmentEnvironment;
